查看原文
其他

Frida追踪定Socket接口自吐游戏APK的服务器IP和地址

PTRer 看雪学院 2021-05-18

本文为看雪论坛文章

看雪论坛作者ID:PTRer




题目来源




样本来自看雪2W班十月第二题。


题目要求




之前课程已经给出的Socket的自吐,还差一个服务器IP地址和端口的自吐,补充上。
 

解题思路




编写测试demo后,首先利用objection去批量hook住内存中socket所有类,然后模拟触发socket创建,从被触发的socket类的方法中找到与IP地址和端口相关的方法。

接着单独hook住与ip地址和端口相关的方法,再次模拟触发socket创建,观察hook结果符合预期。最终编写frida脚本自动化拿到服务器的ip和端口,并利用植物大战僵尸apk测试,符合预期。


考察知识点




本题知识点更多的是一种通用解题思路,这种利用ojection批量hook住相关类的方法不局限于获取服务器的ip地址和端口。


解题过程




(1) 第一步,编写一个客户端的demo。Mainactivity核心代码如下,创建两个按键,一个基于MessageTransmit类创建socket,一个用来发包。


MessageTransmit类核心代码如下,测试服务端ip为“192.168.31.46”,测试端口是6666。


(2) 第二步,利用objection进行分析。分析的第一步骤,利用objection执行如下命令查看内存中有哪些socket类。


然后将这些类拷贝到excel中,生成“android hooking watch  class java.net.AbstractPlainSocketImpl”这样的列表,再拷贝到hook.txt中,采用如下命令启动apk时,一次性全部hook住socket相关类中所有方法。


在app上按键触发socket创建流程,可以看到如下调用关系,其中光亮函数看上去就是拿到服务端地址和端口的关键。


于是我们重新objection这个apk,然后采用如下两条命令,hook住getPort和getAddress方法,再次点击创建socket按键,可以看到打印出了服务端ip和地址,与我们demo中填写的一致。


(3) 第三步,编写frdia脚本,并进行测试。如下是frida脚本,根据log可以看到打印出了服务端的ip和port。


最后我还用这个frida脚本,跑了下植物大战僵尸apk,测试结果如下,也确实能自吐出服务端的ip和port。




- End -




看雪ID:PTRer

https://bbs.pediy.com/user-home-874618.htm

  *本文由看雪论坛 PTRer  原创,转载请注明来自看雪社区。



《安卓高级研修班》2021年6月班火热招生中!


# 往期推荐





公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com



球分享

球点赞

球在看



点击“阅读原文”,了解更多!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存